Updates for runZero 5.1#47
Merged
Merged
Conversation
hdm
marked this pull request as draft
May 21, 2026 07:31
hdm
force-pushed
the
custom-integrations-5.0
branch
from
June 9, 2026 06:25
d0db9f0 to
75fd2b6
Compare
- Migrate integrations to runZero 5.0 API - Add incremental asset reporting via report_assets() - Remove deprecated/unused functions - Bug fixes and regenerated integrations JSON/README
hdm
force-pushed
the
custom-integrations-5.0
branch
from
June 10, 2026 06:15
3ff0dc5 to
341af67
Compare
This was referenced Jun 10, 2026
Contributor
Author
|
placeholder of 5.1 until we pick the revision for this (to enable version compat checks) |
hdm
marked this pull request as ready for review
July 20, 2026 07:49
Contributor
There was a problem hiding this comment.
Pull request overview
This PR migrates the repository’s custom integrations to the runZero 5.1 “v2” Starlark surface by moving integration metadata into embedded CONFIG blocks, adopting the new helper/builtin modules, and refactoring many integrations to stream assets page-by-page via report_assets for better memory behavior.
Changes:
- Refactors multiple integrations to use
CONFIG, typedkwargsaccessors,get_json/post_json,network_interface, andto_custom_attributes, with wider adoption of streaming viareport_assets. - Removes legacy per-integration
config.jsonmetadata and variouscustom-integration-*.starscripts, replacing them with renamed<integration>.starscripts. - Updates docs and tooling (catalog generation script, PR template, migration guide) to align with the 5.1 conventions.
Reviewed changes
Copilot reviewed 151 out of 151 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| windows-wmi/README.md | Adds documentation for the Windows WMI integration parameters and usage. |
| windows-smb-shares/windows-smb-shares.star | Adds a new SMB share enumeration integration using runzero.smb. |
| windows-smb-shares/README.md | Documents authentication and output for the SMB shares integration. |
| wazuh/README.md | Updates credential/parameter naming guidance for v2 fields. |
| wazuh/config.json | Removes legacy integration metadata file. |
| vulnerability-workflow/custom-integration-vulnerability-workflow.star | Removes legacy workflow script in favor of v2 replacement. |
| vulnerability-workflow/config.json | Removes legacy integration metadata file. |
| ubiquiti-unifi-network/README.md | Updates docs to use api_key instead of legacy access fields. |
| ubiquiti-unifi-network/config.json | Removes legacy integration metadata file. |
| task-sync/custom-integration-task-sync.star | Removes legacy task sync script in favor of v2 replacement. |
| task-sync/config.json | Removes legacy integration metadata file. |
| tanium/tanium.star | Migrates Tanium integration to embedded CONFIG, helper HTTP, streaming, and to_custom_attributes. |
| tanium/README.md | Updates docs to use api_token field. |
| tanium/config.json | Removes legacy integration metadata file. |
| tailscale/README.md | Updates docs for new credential field names. |
| tailscale/config.json | Removes legacy integration metadata file. |
| sumo-logic/sumo.star | Adds v2 outbound exporter to Sumo Logic with embedded CONFIG. |
| sumo-logic/README.md | Updates docs to use runzero_export_token. |
| sumo-logic/custom-integration-sumo.star | Removes legacy Sumo integration script. |
| sumo-logic/config.json | Removes legacy integration metadata file. |
| stairwell/stairwell.star | Migrates Stairwell integration to embedded CONFIG, streaming via report_assets, and standard helpers. |
| stairwell/README.md | Updates credential field naming for v2. |
| stairwell/config.json | Removes legacy integration metadata file. |
| solarwinds-information-service/swis.star | Adds v2 SWIS integration using get_json and streaming. |
| solarwinds-information-service/README.md | Updates docs to use username/password fields. |
| solarwinds-information-service/custom-integration-swis.star | Removes legacy SWIS integration script. |
| solarwinds-information-service/config.json | Removes legacy integration metadata file. |
| snow-license-manager/README.md | Updates docs to use username/password fields. |
| snow-license-manager/config.json | Removes legacy integration metadata file. |
| snipe-it/snipe-it.star | Migrates Snipe-IT integration to embedded CONFIG, helper HTTP, and streaming import. |
| snipe-it/README.md | Updates docs to use api_token. |
| snipe-it/config.json | Removes legacy integration metadata file. |
| scripts/generate_integration_json.py | Updates catalog generator to read embedded CONFIG instead of config.json, and stabilizes lastUpdated when unchanged. |
| scan-passive-assets/config.json | Removes legacy integration metadata file. |
| scale-computing/scale-computing.star | Adds embedded CONFIG, supports new structured kwargs with legacy fallback, and streams assets via report_assets. |
| scale-computing/README.md | Updates docs to reflect v2 parameter fields and legacy fallback format. |
| scale-computing/config.json | Removes legacy integration metadata file. |
| runzero-vulnerability-workflow/vulnerability-workflow.star | Adds v2 internal vulnerability workflow integration using helper HTTP and CONFIG. |
| runzero-vulnerability-workflow/README.md | Documents new parameter names for the workflow integration. |
| runzero-task-sync/task-sync.star | Adds v2 task sync integration with split src/dst options/includes and helper HTTP usage. |
| runzero-task-sync/README.md | Updates docs to use src_api_token/dst_api_token. |
| runzero-scan-passive-assets/scan-passive-assets.star | Migrates passive-scan helper to embedded CONFIG, base URL parameterization, and JSON request bodies. |
| runzero-scan-passive-assets/README.md | Updates docs to use org_api_token. |
| proxmox/README.md | Updates docs for new api_token_id/api_token_secret fields and legacy fallback naming. |
| proxmox/proxmox.star | Adds embedded CONFIG, structured kwargs with legacy fallback, and streams assets via report_assets. |
| proxmox/config.json | Removes legacy integration metadata file. |
| pfsense/README.md | Updates docs to new script naming and v2 credential fields. |
| pfsense/config.json | Removes legacy integration metadata file. |
| ninjaone/README.md | Updates docs to client_id/client_secret fields. |
| ninjaone/custom-integration-ninjaone.star | Removes legacy NinjaOne integration script. |
| ninjaone/config.json | Removes legacy integration metadata file. |
| nexthink/README.md | Updates docs for v2 script name and parameterization. |
| nexthink/config.json | Removes legacy integration metadata file. |
| netskope/README.md | Updates docs to use api_token. |
| netskope/netskope.star | Adds v2 Netskope integration with embedded CONFIG and streaming. |
| netskope/custom-integration-netskope.star | Removes legacy Netskope integration script. |
| netskope/config.json | Removes legacy integration metadata file. |
| mssql-databases/README.md | Adds documentation for SQL Server database inventory integration. |
| mssql-databases/mssql-databases.star | Adds v2 SQL Server integration using runzero.sql and streaming. |
| moysle/README.md | Updates docs for Mosyle v2 fields and legacy support. |
| moysle/moysle.star | Migrates Mosyle integration to embedded CONFIG, streaming, and new credential field names. |
| moysle/config.json | Removes legacy integration metadata file. |
| manage-engine-endpoint-central/README.md | Updates docs for v2 url/oauth_token fields. |
| manage-engine-endpoint-central/endpoint-central.star | Migrates Endpoint Central integration to embedded CONFIG and streaming via report_assets. |
| manage-engine-endpoint-central/config.json | Removes legacy integration metadata file. |
| linux-ssh/README.md | Adds documentation for SSH-based Linux host fact collection integration. |
| linux-ssh/linux-ssh.star | Adds v2 SSH-based Linux integration using runzero.ssh. |
| lima-charlie/README.md | Updates docs for v2 organization_id/api_token fields. |
| lima-charlie/lima-charlie.star | Migrates LimaCharlie integration to embedded CONFIG and streaming. |
| lima-charlie/config.json | Removes legacy integration metadata file. |
| LICENSE | Updates copyright holder/year range for MIT license. |
| kubernetes/README.md | Adds documentation for Kubernetes integration and ServiceAccount setup. |
| kubernetes/config.json | Removes legacy integration metadata file. |
| kandji/README.md | Updates docs to use v2 url/api_token fields and removes subdomain-only guidance. |
| kandji/kandji.star | Adds v2 Kandji integration with embedded CONFIG and streaming with per-device detail fetches. |
| kandji/custom-integration-kandji.star | Removes legacy Kandji integration script. |
| kandji/config.json | Removes legacy integration metadata file. |
| jamf/README.md | Updates docs to use client_id/client_secret fields. |
| jamf/config.json | Removes legacy integration metadata file. |
| ivanti_neurons/README.md | Updates docs for v2 OAuth field names. |
| ivanti_neurons/neurons.star | Adds v2 Ivanti Neurons integration with embedded CONFIG and streaming. |
| ivanti_neurons/custom-integration-neurons.star | Removes legacy Ivanti Neurons integration script. |
| ivanti_neurons/config.json | Removes legacy integration metadata file. |
| halycon/README.md | Simplifies docs to username/password-only auth model. |
| halycon/config.json | Removes legacy integration metadata file. |
| ghost/README.md | Updates docs to use api_token and new script name. |
| ghost/ghost.star | Migrates Ghost Security integration to embedded CONFIG and streaming via report_assets. |
| ghost/config.json | Removes legacy integration metadata file. |
| extreme-cloud-iq/README.md | Updates docs for v2 username/password fields. |
| extreme-cloud-iq/extreme-cloud-iq.star | Migrates Extreme CloudIQ integration to embedded CONFIG and streaming. |
| extreme-cloud-iq/config.json | Removes legacy integration metadata file. |
| drata/README.md | Updates docs to use api_token. |
| drata/drata.star | Migrates Drata integration to embedded CONFIG and streaming. |
| drata/config.json | Removes legacy integration metadata file. |
| docs/migration-v1-to-v2.md | Adds a migration guide describing CONFIG rules, helpers, streaming, and testing. |
| digital-ocean/README.md | Updates docs to use api_token. |
| digital-ocean/digital-ocean.star | Adds v2 DigitalOcean integration with embedded CONFIG and streaming. |
| digital-ocean/custom-integration-digital-ocean.star | Removes legacy DigitalOcean integration script. |
| digital-ocean/config.json | Removes legacy integration metadata file. |
| device42/README.md | Updates docs to new auth field names. |
| device42/device42.star | Migrates Device42 integration to embedded CONFIG and streaming. |
| device42/config.json | Removes legacy integration metadata file. |
| cyberint/cyberint.star | Migrates Cyberint integration to embedded CONFIG, base URL param, and streams assets. |
| cyberint/config.json | Removes legacy integration metadata file. |
| cortex-xdr/README.md | Updates docs to use api_key/api_key_id. |
| cortex-xdr/cortex-xdr.star | Migrates Cortex XDR integration to embedded CONFIG and streaming endpoint import. |
| cortex-xdr/config.json | Removes legacy integration metadata file. |
| cisco-ise/README.md | Updates docs to new basic-auth credential field naming. |
| cisco-ise/config.json | Removes legacy integration metadata file. |
| cisco-ise/cisco-ise.star | Migrates Cisco ISE integration to embedded CONFIG, kwargs http options, and streaming. |
| carbon-black/README.md | Updates docs to new org/api key naming. |
| carbon-black/config.json | Removes legacy integration metadata file. |
| boilerplate/README.md | Updates boilerplate docs to match v2 credential naming guidance. |
| boilerplate/custom-integration-boilerplate.star | Removes legacy boilerplate script. |
| boilerplate/config.json | Removes legacy integration metadata file. |
| bitsight/README.md | Updates docs to require company_id and api_token. |
| bitsight/config.json | Removes legacy integration metadata file. |
| automox/README.md | Updates docs to use api_token (and optional org hint). |
| automox/config.json | Removes legacy integration metadata file. |
| audit-events-to-webhook/README.md | Updates docs for v2 script name and legacy credential field. |
| audit-events-to-webhook/custom-integration-audit-events.star | Removes legacy audit-events script. |
| audit-events-to-webhook/config.json | Removes legacy integration metadata file. |
| audit-events-to-webhook/audit-events.star | Adds v2 outbound audit-log forwarder with embedded CONFIG and legacy credential support. |
| akamai-guardicore-centra/README.md | Updates docs to username/password fields. |
| akamai-guardicore-centra/config.json | Removes legacy integration metadata file. |
| .github/skills/create-custom-integration/references/identity-decision.md | Adds an identity decision record template for asset ID stability/uniqueness. |
| .github/pull_request_template.md | Updates PR checklist to require embedded CONFIG instead of config.json. |
Comments suppressed due to low confidence (3)
moysle/moysle.star:222
network_interface()is called with MAC and IP arguments swapped, which will produce invalid/empty interfaces (and may raise if the helper validates types).
moysle/moysle.star:226network_interface()is called with MAC and IP arguments swapped, which will produce invalid/empty interfaces (and may raise if the helper validates types).
cisco-ise/cisco-ise.star:86network_interface()helper expects anipslist (as used throughout this repo), but this calls it with anip=keyword. This will likely raise an unexpected-kwarg error at runtime.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updates for runZero 5.1: a bigger Starlark toolkit and self-describing integration scripts
Important
This branch requires runZero 5.1 or newer. The scripts here load builtins
(
get_json,network_interface,to_custom_attributes,kwargs, therunzero.*protocol modules, ...) and declare embeddedCONFIGblocks thatonly the 5.1 Explorer and console understand. Running them on an earlier
release will fail. Scripts that set
minVersionenforce this automatically.TL;DR
Every integration in this repo has been refactored onto the new 5.1 custom-integration
API surface. The result is dramatically less boilerplate, scripts that describe their
own credential form, new non-HTTP data sources, and explicit control over how imported
assets merge.
custom-attribute flattening are now builtins instead of copy-pasted helpers.
CONFIGblock at the top of each script renders thecredential form, validates input, and encrypts secrets — no platform change needed
to add a new integration.
matchBehaviorflag lets each script tell the cruncher howaggressively to merge the assets it imports.
minVersion: "5.1.0"; randomasset-ID fallbacks were removed so malformed records cannot create a new asset
on every poll.
Before vs. after
Authentication — before, scripts base64-encoded basic auth and hand-built bearer headers:
Fetching JSON with retries/pagination — before, every script re-implemented status
checks, JSON decoding, and backoff:
Reading credentials — before, raw
kwargs.get(...)with manual casting; now typed,validating accessors:
Building network interfaces — before, scripts looped to classify v4/v6 and normalize
MACs; now one helper does it (mixed list,
addr:port/%zonestripping, dedupe, caps):New capabilities
Self-describing scripts (embedded
CONFIG). Each script now declares a top-levelCONFIG = {...}literal with itsid/name/type,version, optionalminVersion,and credential
params. The platform renders the form from it, applies defaults, coercesand validates types (
required/min/max/pattern/enum), and routestype: "secret"fields through encrypted storage. Shared
OPTIONS_HTTP/OPTIONS_TLSincludes give everyintegration consistent connection/TLS controls without copy-paste. This replaces the old
config.jsonmetadata files, which have been removed.Reach beyond HTTP. New modules open raw connections to sources without a REST API:
socket(tcp/udp/tls),runzero.ssh,runzero.smb,runzero.winrm,runzero.wmirunzero.sqlfor Postgres/MySQL/SQL Server (parameterizedquery/exec)Connections opened by a script are tracked and closed automatically when the run ends.
A real standard library.
re(RE2 regex),xml,csv,jsonstream(streaming largearrays/NDJSON),
jwt(encode/decode/verify),runzero.progress(progress bar + log linesin the UI), plus crypto (
hmac_*, AWS SigV4sign_v4,random_bytes/random_hex) andhex/base32encodings. URL helpers (url_parse/url_join/multipart) andhttp.head/http.putround out the HTTP verbs.Richer assets and merge control.
runzero.typesgainsService/ServiceProtocolDataand ato_custom_attributeshelperthat flattens arbitrary values into the
string -> stringshape (nested dicts, lists,length caps) the platform expects.
matchBehavioronImportAssetaccepts a flag string so each script chooses how thecruncher merges — e.g.
"no-mac-break no-ip-break no-name-break"when it has a stableforeign id, or
"no-id-match no-id-break"for ephemeral ids.What changed in this repo
to_custom_attributes(...),network_interface(...),get_json/post_json,basic/bearer/oauth2_token, and thetyped
kwargsaccessors, removing hand-rolled flattening, header building, and pagination.CONFIGblock to every script and removed the oldconfig.jsonmetadata files. Credential field names were normalized away from the generic
access_key/access_secretpair to descriptive keys (api_token,client_id,username/password, etc.) that match each API.custom-integration-/custom_integration-filename prefix. Each directory now contains a
<name>.star(e.g.tailscale.star,cisco-ise.star,boilerplate.star).Services) from the Kubernetes API using a ServiceAccount bearer token.
docs/starlark-helpers.md), updatedAGENTS.mdand PR template for the
CONFIGconvention and<name>.starnaming, a new"Asset IDs and match behavior" README section, and refreshed cross-references in
docs/integrations.jsonand individual READMEs./create-custom-integrationskill. The skill blocks implementation until thesource ID's stability, uniqueness scope, and one-to-one asset cardinality are
documented.
validationMode: "compile",while HTTP integrations use the local wiring check. Catalog generation is
deterministic across repeated runs.
Match behavior reference
ImportAssetaccepts an optionalmatchBehaviorstring. The default matches and breaks onall four dimensions (id, MAC, IP, name), which is correct when the integration owns a strong
id. When the id is weak or absent, use the knobs below to tell the cruncher which dimensions
are unreliable for matching (finding the right existing asset to merge into) and which
are unreliable for breaking (refusing a merge that one dimension would otherwise block).
no-id-matchno-id-breakno-mac-matchno-mac-breakno-ip-matchno-ip-breakno-name-matchno-name-breakCombine flags with spaces. Recommended presets:
matchBehaviorunset.The default uses every signal.
workloads, VPN clients):
matchBehavior="no-mac-break no-ip-break no-name-break". Keepsid-based merging authoritative, but stops drift in the other dimensions from blocking a
legitimate merge.
matchBehavior="no-id-match no-id-break". Use a documented deterministic,namespaced composite and require a usable MAC, IP, or hostname for correlation.
If no safe identity or correlation signal exists, skip the record; never use a
random ID fallback.
attributes: use
no-id-match no-id-breakon the enrichment-only integration so it alwaysmerges into the primary asset by MAC/IP/name rather than creating a parallel record.
Rule of thumb: if the upstream id is not both stable and unique, relax id matching. If
MAC / IP / hostname are known to be unreliable for this source, relax the corresponding
-breakflags so a conflict there doesn't fragment one real asset into many.Safety notes for authors
redacted from script print/progress output as a secondary control; scripts must
not intentionally log credentials or transformed secret values.
jwtrejects thenonealgorithm;xml.parseis XXE-safe.cleaned up on cancel.
Docs
Authoring guidance and a runnable example that exercises the new helpers live in this repo:
the helpers reference (
docs/starlark-helpers.md),AGENTS.md, andboilerplate/boilerplate.star.